#include"Ringqueue.hpp"
#include<pthread.h>
#include<unistd.h>

//我们不清楚生产者和消费者谁先被调度（这是由调度器决定的），但是通过PV操作可知，一定是生产者先跑，因为如果没有
//数据资源，消费者要被阻塞的（通过sem_wait）
void* Productor(void* args)
{
    Ringqueue<int>* rq=static_cast<Ringqueue<int>*>(args);
    int cnt=100;
    while(true)
    {
        rq->Push(cnt);
        cout<<"Produtor done,data is:    "<<cnt<<endl;
        cnt--;
        //sleep(1);//让生产者慢一点

    }
}

void* Consumer(void* args)
{
    Ringqueue<int>* rq=static_cast<Ringqueue<int>*>(args);
    while(true)
    {
        int data=0;
        rq->Pop(&data);
        cout<<"Consumer done,data is:    "<<data<<endl;
        //sleep(1);
    }
}

int main()
{
    pthread_t c,p;

    Ringqueue<int>* rq=new Ringqueue<int>();

    pthread_create(&p,nullptr,Productor,rq);
    pthread_create(&c,nullptr,Consumer,rq);

    pthread_join(p,nullptr);
    pthread_join(c,nullptr);
    return 0;
}